package com.wfx.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wfx.entity.*;
import com.wfx.mapper.SysModuleMapper;
import com.wfx.service.ISysModuleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhu
 * @since 2021-01-22
 */
@Service
public class SysModuleServiceImpl extends ServiceImpl<SysModuleMapper, SysModule> implements ISysModuleService {

    @Autowired
    private SysModuleMapper sysModuleMapper;


    @Override
    public TreeNode tree() {
        return sysModuleMapper.tree();
    }

    @Override
    public PageResult<SysModule> search(PageDTO<SysModule> pageDTO) {
        IPage<SysModule> iPage = new Page<>(pageDTO.getPage(),pageDTO.getLimit());
        QueryWrapper<SysModule> queryWrapper = new QueryWrapper<>();
        SysModule data = pageDTO.getData();
        PageResult<SysModule> pageResult = new PageResult<>();
        if (!StringUtils.isEmpty(data.getModuleCode())){
            queryWrapper.eq("module_code",data.getModuleCode());
        }
        IPage<SysModule> pageInfo = sysModuleMapper.selectPage(iPage, queryWrapper);
        pageResult.setSuccess(true);
        pageResult.setTotal(pageInfo.getTotal());
        pageResult.setData(pageInfo.getRecords());

        return pageResult;
    }

    @Override
    public Result add(SysModule sysModule) {

        if(!StringUtils.isEmpty(sysModule.getModuleCode())){
            int i = sysModuleMapper.updateById(sysModule);
            return  new Result(i==1?true:false,i==1?"修改成功":"修改失败");
        }else {
            QueryWrapper<SysModule> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("parent_module",sysModule.getParentModule());
            List<SysModule> sysModules = sysModuleMapper.selectList(queryWrapper);
            if(sysModules.size()==0){
                sysModule.setModuleCode(sysModule.getParentModule()+"01");
                int i = sysModuleMapper.insert(sysModule);
                return new Result(i == 1 ? true : false, i == 1 ? "添加成功" : "添加失败");
            }else {
                SysModule sysModule1 = sysModules.get(sysModules.size()-1);
                sysModule.setModuleCode("0"+(Long.parseLong(sysModule1.getModuleCode())+1)+"");
                int i = sysModuleMapper.insert(sysModule);
                return new Result(i == 1 ? true : false, i == 1 ? "添加成功" : "添加失败");
            }
        }
    }

    @Override
    public Result delById(SysModule sysModule) {
        QueryWrapper<SysModule> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("parent_module",sysModule.getModuleCode());
        List<SysModule> sysModules = sysModuleMapper.selectList(queryWrapper);
        if(sysModules.size()==0){
            int i = sysModuleMapper.deleteById(sysModule);
            return new Result(i == 1 ? true : false, i == 1 ? "删除成功" : "删除失败");
        }else {

            return new Result(false,"父节点不可删除");
        }
    }


}
